# 构建数据结构栈
class Stack:  
    def __init__(self):  
        # 初始化一个空列表来存储栈元素  
        self.items = []  
  
    def is_empty(self):  
        # 检查栈是否为空  
        return len(self.items) == 0  
  
    def push(self, item):  
        # 向栈中添加元素  
        self.items.append(item)  
  
    def pop(self):  
        # 从栈中移除并返回最后添加的元素   
        if self.is_empty():  
            raise IndexError("pop from empty stack")  
        return self.items.pop()  
  
    def peek(self):  
        # 返回最后添加的元素但不移除它    
        if self.is_empty():  
            raise IndexError("peek from empty stack")  
        return self.items[-1] 

    def clear(self):
        # 清空栈
        self.items = [] 
  
    def size(self):  
        # 返回栈中元素的个数  
        return len(self.items)  
    

def remove_consecutive_duplicates(input_string: str) -> str: 
    res = Stack()
    for i in input_string:
        # 如果结果栈非空且最后一个字符与当前字符相同，则出栈
        # 否则则入栈
        if not res.is_empty() and res.peek() == i:
            res.pop()
        else:
            res.push(i)
    return ''.join(reversed([res.pop() for _ in range(res.size())]))


input_string1 = "abbaca"  
input_string2 = "abbacabbacd"
print(remove_consecutive_duplicates(input_string1))  
print(remove_consecutive_duplicates(input_string2))  